Writing tests for software is often a tedious process. Writing tests for a complex system with complex input structures is also difficult and requires increasingly large portions of code. Such test code may require redundant portions of code or global lists of defined inputs.